<?php
namespace Self\Controller;

use Think\Controller;

class IndexController extends Controller
{

    function index(){
        $res=$this->output('',"small",false);
        echo "<div style='font-family:Consolas,Monaco,monospace;'>".$res."</div>";
    }
    /*
    *	功能：
    *	由不同图片格式，获得图像资源并返回
    */
    function getImg($imgName){
        $arr=getimagesize($imgName);
        if($arr[2]==1){
            return imagecreatefromgif($imgName);
        }else if($arr[2]==2){
            return imagecreatefromjpeg($imgName);
        }else if($arr[2]==3){
            return imagecreatefrompng($imgName);
        }else{
            echo "对不起，暂不支持该格式！";
        }
    }

    function output($imgName,$size="medium",$echoText="false"){
        /*
        *	参数说明：
        *	imageName	图像名称
        *	size		可选参数：low、medium、big 功能：控制输出不同的字符画大小
        *	echoText	功能：设置是否保存为txt文件
        */

        $im = $this->getImg($imgName);
        $output="";
        $str='@80GCLft1i;:,. ';	//填充字符

        //选取每个像素块的代表点。步长越大，图片越小
        switch($size){
            case "small":
                $stepx=8;
                $stepy=16;
                break;
            case "medium":
                $stepx=4;
                $stempy=8;
                break;
            case "big":
                $stepx=2;
                $stepy=4;
                break;
            default:
                $stepx=4;
                $stempy=8;
                break;
        }

        $x=imagesx($im);
        $y=imagesy($im);
        for($j=0;$j<$y;$j+=$stepy){
            for($i=0;$i<$x;$i+=$stepx){
                $colors=imagecolorsforindex($im,imagecolorat($im,$i,$j));	//获取像素块的代表点RGB信息
                $greyness=(0.3*$colors["red"]+0.59*$colors["green"]+0.11*$colors["blue"])/255;	//灰度值计算公式：Gray=R*0.3+G*0.59+B*0.11
                $offset=(int)ceil($greyness*(strlen($str)-1));	//根据灰度值选择合适的字符
                if($offset==(strlen($str)-1))
                    $output.=" ";	//替换空格为 ；方便网页输出
                else
                    $output.=$str[$offset];
            }
            $output.="<br/>";
        }

        imagedestroy($im);

        //输出到文本(可选)
        if($echoText){
            $output=str_replace("<br/>",PHP_EOL,$output);
            $output=str_replace(" "," ",$output);
            @unlink("output.txt");
            file_put_contents("output.txt",$output);
        }
        return $output;	//默认输出到网页
    }


}